package com.github.cakin.shiro.chapter8.web.filter;

import org.apache.shiro.web.servlet.AdviceFilter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * @className: MyAdviceFilter
 * @description: AdviceFilter 提供了 AOP 的功能，其实现和 SpringMVC 中的 Interceptor 思想一样
 * @date: 2020/5/21
 * @author: cakin
 */
public class MyAdviceFilter extends AdviceFilter {
    /**
     * 功能描述：进行请求的预处理，然后根据返回值决定是否继续处理（true：继续过滤器链）；可以通过它实现权限控制
     *
     * @author cakin
     * @date 2020/5/21
     * @param request 请求
     * @param response 响应
     * @return boolean
     */
    @Override
    protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
        System.out.println("====预处理/前置处理");
        return true; // 返回false将中断后续拦截器链的执行
    }
    /**
     * 功能描述：执行完拦截器链之后正常返回后执行
     *
     * @author cakin
     * @date 2020/5/21
     * @param request 请求
     * @param response 响应
     */
    @Override
    protected void postHandle(ServletRequest request, ServletResponse response) throws Exception {
        System.out.println("====后处理/后置返回处理");
    }
    /**
     * 功能描述：不管最后有没有异常，afterCompletion 都会执行，完成如清理资源功能。
     *
     * @author cakin
     * @date 2020/5/21
     * @param request 请求
     * @param response 响应
     * @param exception 异常
     */
    @Override
    public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) {
        System.out.println("====完成处理/后置最终处理");
    }
}
